package com.jiezuo.common.util;//package com.jiezuo.common.util;
//
//import com.deepoove.poi.XWPFTemplate;
//import com.deepoove.poi.xwpf.NiceXWPFDocument;
//import com.spire.doc.*;
//import com.spire.doc.collections.*;
//import com.spire.doc.documents.DocumentObjectType;
//import com.spire.doc.documents.Paragraph;
//import com.spire.doc.fields.DocPicture;
//import com.spire.ms.System.Collections.Generic.KeyValuePair;
//import com.jiezuo.common.exception.BusinessRuntimeException;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.poi.xwpf.usermodel.XWPFDocument;
//
//import java.io.*;
//import java.nio.file.Files;
//import java.util.*;
//
///**
// *@Description 对office域的替换
// *      目前对DOC支持存在问题
// *
// *@Author 庞留杰
// *@Date2022/7/28 10:31
// *@Version V1.0
// **/
//@Slf4j
//public class SpireDocUtil {
//
//    public final static String JZQYZ_BASE64 = "";
//    public final static String TEST_BASE64 = "";
//
//    //耗时 = 4603
//    public static void main(String[] args) {
//        long t1 = SystemClock.now();
//        String templatePath = System.getProperty("user.dir") + "\\zksz-common\\src\\main\\resources\\static\\半固定_螺栓、螺钉、螺柱_13.docx";
//        String savePath = System.getProperty("user.dir") + "\\zksz-common\\src\\main\\resources\\static\\生成文件.docx";
//
//        XWPFTemplate compile = XWPFTemplate.compile(templatePath);
//        NiceXWPFDocument document = compile.getXWPFDocument(); // 获取到的是document.xml，只包含word中间部分，不包含页眉页脚，每个word只有一份
//        System.out.println(">>>>>>>>>>>>>>>>> WORD的XML信息 >>>>>>>>>>>>>>>>> \n" + document.getDocument());
//
//        Map<String, Object> datas = new HashMap() {{
//            put("jdh", "-NO00000001=");
//            put("jcxm", "-检测项目BBBB=");
//            put("wtdw", "-委托单位CCCC=");
//            put("sgdw", "-施工单位DDDD=");
//            put("GCMC5", "-工程名称EEEE=");
//            put("qfr", base64ToByte(JZQYZ_BASE64));
//            put("jyry", base64ToByte(JZQYZ_BASE64));
//            put("wtdw", "郑州外国语学校（代建单位：郑州地产集团有限公司）");
//            put("bgfflx", "1");
//            put("shr", base64ToByte(JZQYZ_BASE64));
//            put("jzqyz", base64ToByte(JZQYZ_BASE64));
//            put("jyry", base64ToByte(TEST_BASE64));
//            put("qfr", localToByte("E:\\图片\\签名3.jpg"));
//        }};
//        fillData(templatePath, savePath, datas, false);
//        long t2 = SystemClock.now();
//        System.out.println("耗时 = " + (t2 - t1));
//    }
//
//    /**
//     * @param replace true:所有内容域都会替换，如果不存在，置为“/”  false:不存在，不处理，只处理datas中有的数据
//     * */
//    public static void fillData(String templatePath, String savePath, Map<String, Object> datas, boolean replace) {
//        log.info("》》》》》》》》》》进入模板数据填充【{}】》》》》》》》》》》", templatePath);
//        File file = new File(templatePath);
//        if (!file.exists()) {
//            throw new BusinessRuntimeException("文件不存在【" + templatePath + "】");
//        }
//
//        //初始化document对象
//        Document document = new Document();
//        document.loadFromFile(templatePath);
//
//        //对域（文档变量）进行处理
//        dealDocVariables(document, datas, replace);
//
//        SectionCollection sections = document.getSections();
//        for (Object sectionObject : sections) {
//            Section section = (Section) sectionObject;
//            //文档内容
//            ParagraphCollection paragraphs = section.getParagraphs();
//            TableCollection tables = section.getTables();
//            dealPicture(paragraphs, tables, datas);
//
//            // 页眉
//            HeaderFooter header = section.getHeadersFooters().getHeader();
//            ParagraphCollection headerParagraphs = header.getParagraphs();
//            TableCollection headerTables = header.getTables();
//            dealPicture(headerParagraphs, headerTables, datas);
//
//            // 页脚
//            HeaderFooter footer = section.getHeadersFooters().getFooter();
//            ParagraphCollection footerParagraphs = footer.getParagraphs();
//            TableCollection footerTables = footer.getTables();
//            dealPicture(footerParagraphs, footerTables, datas);
//        }
//        log.info(">>>>>>>>>>>>>>> 文档保存路径 【{}】>>>>>>>>>>>>>",savePath);
//        //保存并关闭文档
//        document.saveToFile(savePath);
//        document.close();
//        // 去除水印
//        cleanLicenseFlag(savePath);
//    }
//
//    /**
//     * 去除水印:Evaluation Warning: The document was created with Spire.Doc for JAVA.
//     * */
//    public static void cleanLicenseFlag(String savePath) {
//        try {
//            XWPFDocument doc = new XWPFDocument(new FileInputStream(savePath));
//            doc.removeBodyElement(0);
//            doc.write(new FileOutputStream(savePath));
//            doc.close();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    //对域（文档变量）进行处理
//    public static void dealDocVariables(Document document, Map<String, Object> datas,boolean replace) {
//        List<String> excludeVariable = Arrays.asList("commondata");// 默认排除一下
//        VariableCollection variables = document.getVariables();
//        for (Object variableObject : variables) {
//            KeyValuePair docVariable = (KeyValuePair) variableObject;
//            System.out.println(docVariable.getKey());
//            if (!excludeVariable.contains(docVariable.getKey())) {
//                String key = docVariable.getKey() + "";
//                if(replace){
//                    String value = StringUtil.isNotEmpty(datas.get(docVariable.getKey()) + "") ? datas.get(docVariable.getKey()) + "" : "/";
//                    document.getVariables().set(key, value);
//                }else {
//                    if(datas.containsKey(key)){
//                        String value = StringUtil.isNotEmpty(datas.get(docVariable.getKey()) + "") ? datas.get(docVariable.getKey()) + "" : "";
//                        document.getVariables().set(key, value);
//                    }
//                }
//            }
//        }
//        document.isUpdateFields(true); // 更新域
//    }
//
//    //对图片进行处理
//    public static void dealPicture(ParagraphCollection paragraphs, TableCollection tables, Map<String, Object> datas) {
//        replacePicture(paragraphs, datas);//1.替换段落中图片
//        for (Object tableObject : tables) {//2.替换表格中图片
//            Table table = (Table) tableObject;
//            int rowCount = table.getRows().getCount();//一共多少行
//            for (int i = 0; i < rowCount; i++) {
//                int cellCount = table.getRows().get(i).getCells().getCount();//当前行一共多少列
//                for (int j = 0; j < cellCount; j++) {
//                    ParagraphCollection paragraphs1 = table.get(i, j).getParagraphs();
//                    replacePicture(paragraphs1, datas);
//                }
//            }
//        }
//    }
//
//    // 替换图片
//    public static void replacePicture(ParagraphCollection paragraphs, Map<String, Object> datas) {
//        float height = 0, width = 0;
//        for (Object paragraph : paragraphs) {
//            Paragraph paragraph1 = (Paragraph) paragraph;
//            DocumentObjectCollection childs = paragraph1.getChildObjects();
//            for (Object childObject : childs) {
//                DocumentObject docObject = (DocumentObject) childObject;
//                if (docObject.getDocumentObjectType() == DocumentObjectType.Picture) {
//                    DocPicture picture = (DocPicture) docObject;
//                    height = picture.getHeight();
//                    width = picture.getWidth();
//                    String title = picture.getTitle();
//                    Object image = datas.get(title);
//                    if (image != null) {
//                        byte[] is = (byte[]) image;
//                        // 图片处理
//                        picture.loadImage(is);
//                        picture.setHeight(height);
//                        picture.setWidth(width);
//                    }
//                }
//            }
//        }
//    }
//
//    // 将base64转为byte[]
//    public static byte[] base64ToByte(String image) {
//        InputStream inputStream = ofBase64(image);
//        byte[] read = read(inputStream);
//        return read;
//    }
//
//    // 将本地文件转为byte[]
//    public static byte[] localToByte(String image) {
//        byte[] read = null;
//        try {
//            File file = new File(image);
//            read = Files.readAllBytes(file.toPath());
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return read;
//    }
//
//    /**
//     * 功能描述: Base64转InputStream
//     */
//    public static InputStream ofBase64(String image) {
//        String base64 = StringUtils.substringAfterLast(image, ";base64,");//方法取str内分隔符separator后的字符串 data:image/png;base64, data:image/jpeg;base64,
//        Base64.Decoder decoder = Base64.getDecoder();
//        byte[] bytes = null;
//        InputStream is = null;
//        try {
//            bytes = decoder.decode(base64);
//            is = new ByteArrayInputStream(bytes);
//        } catch (Exception e) {
//            log.error("解析图片异常:【{}】", image);
//            throw new BusinessRuntimeException("解析图片异常");
//        } finally {
//            try {
//                is.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        return is;
//    }
//
//    // 将InputStream转为byte[]
//    public static byte[] read(InputStream inputStream) {
//        try {
//            ByteArrayOutputStream baos = new ByteArrayOutputStream();
//            byte[] buffer = new byte[1024];
//            int num = inputStream.read(buffer);
//            while (num != -1) {
//                baos.write(buffer, 0, num);
//                num = inputStream.read(buffer);
//            }
//            baos.flush();
//            return baos.toByteArray();
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                if (inputStream != null) {
//                    inputStream.close();
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        return null;
//    }
//}
